FEXP Solver  1.0.0.0
CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type > Class Template Reference

Parallel solver for multicore CPUs (single workstation). More...

#include <FEXPSolver.h>

Inheritance diagram for CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >:
Collaboration diagram for CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >:

Public Member Functions

 CFEXPParallelSolver (Ptr< ICFEXPModelBuilderBase > builder, Ptr< ICFEXPResultExport > exporter)
 
virtual void Start () override
 It starts process of a numerical simulation. More...
 
virtual void End () override
 It provides forced ending of a numerical simulation process (not implemented yet). More...
 
virtual void AddModel (const t_ModelData &data) override
 
virtual void RmvModel (const std::string &key) override
 
virtual t_fexpcommon_ct GetCurrentDt () override
 
virtual void SetCurrentDt (t_fexpcommon_ct dt) override
 
virtual Ptr< t_SerializedDataGetSerializedData () override
 
virtual void SetSerializedData (Ptr< t_SerializedData > data) override
 
- Public Member Functions inherited from ICFEXPSolverBase
 ICFEXPSolverBase (Ptr< ICFEXPModelBuilderBase > builder, Ptr< ICFEXPResultExport > exporter)
 
virtual ~ICFEXPSolverBase ()
 

Protected Types

enum  ESynchronization {
  eSync1, eSync2, eSync3, eSync4,
  eSync5, eSync6, eSync7, eSync8,
  eSync9, eSync10, eSync11, eSyncCount
}
 
using t_ThrdInstGetter = std::function< Ptr< TThread >(size_t, Ptr< TThreadData >, bool)>
 

Protected Member Functions

void Synchronize (ESynchronization barrier)
 
 CFEXPParallelSolver (Ptr< ICFEXPModelBuilderBase > builder, Ptr< ICFEXPResultExport > exporter, size_t no_calc_threads, ESynchronization last_barrier, t_ThrdInstGetter thrd_inst_gttr)
 
Ptr< TThread > get_thread_instance (size_t id, Ptr< TThreadData > data, bool is_calc_thread)
 
void thread_Calculation_function (size_t thread_id, Ptr< TThreadData > data)
 
Ptr< TExpCalc > get_calculator (size_t thread_id)
 
void update_model_mapping (size_t thread_id)
 
void update_time_step (Ptr< TThreadData > data)
 
void check_time_synchronization (Ptr< TThreadData > data)
 
void try_export_calculation_results (Ptr< TThreadData > data, size_t thread_id)
 
bool check_calculation_end (Ptr< TThreadData > data, size_t thread_id)
 
- Protected Member Functions inherited from ICFEXPSolverBase
void update_topology_map_for_contact ()
 
Ptr< std::vector< Ptr< ICFEXPElementNodeBase > > > check_node (const std::vector< t_fexpcommon_ct > &min_bound, const std::vector< t_fexpcommon_ct > &max_bound)
 

Protected Attributes

size_t _threads
 
Ptr< TThreadData > _thread_data
 
std::map< size_t, Ptr< TThread > > _thread_map
 
std::map< size_t, Ptr< TExpCalc > > _calculator_map
 
std::atomic_bool _result_saved
 
- Protected Attributes inherited from ICFEXPSolverBase
Ptr< t_KD_def_tree< ICFEXPElementNodeBase > > _kd_tree_map
 
Ptr< ICFEXPModelBuilderBase_builder
 
Ptr< ICFEXPResultExport_exporter
 

Detailed Description

template<typename TExpCalc, typename TThreadData, typename TThread, typename Tbarrier>
class CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >

Parallel solver for multicore CPUs (single workstation).

Member Typedef Documentation

◆ t_ThrdInstGetter

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
using CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::t_ThrdInstGetter = std::function<Ptr<TThread>(size_t, Ptr<TThreadData>, bool)>
protected

Member Enumeration Documentation

◆ ESynchronization

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
enum CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::ESynchronization
protected
Enumerator
eSync1 
eSync2 
eSync3 
eSync4 
eSync5 
eSync6 
eSync7 
eSync8 
eSync9 
eSync10 
eSync11 
eSyncCount 

Constructor & Destructor Documentation

◆ CFEXPParallelSolver() [1/2]

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::CFEXPParallelSolver ( Ptr< ICFEXPModelBuilderBase builder,
Ptr< ICFEXPResultExport exporter 
)

◆ CFEXPParallelSolver() [2/2]

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::CFEXPParallelSolver ( Ptr< ICFEXPModelBuilderBase builder,
Ptr< ICFEXPResultExport exporter,
size_t  no_calc_threads,
ESynchronization  last_barrier,
t_ThrdInstGetter  thrd_inst_gttr 
)
protected

Member Function Documentation

◆ AddModel()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
virtual void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::AddModel ( const t_ModelData data)
inlineoverridevirtual

Implements ICFEXPSolverBase.

◆ check_calculation_end()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
bool CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::check_calculation_end ( Ptr< TThreadData >  data,
size_t  thread_id 
)
protected

◆ check_time_synchronization()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::check_time_synchronization ( Ptr< TThreadData >  data)
protected

◆ End()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
virtual void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::End ( )
inlineoverridevirtual

It provides forced ending of a numerical simulation process (not implemented yet).

Implements ICFEXPSolverBase.

◆ get_calculator()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
Ptr<TExpCalc> CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::get_calculator ( size_t  thread_id)
inlineprotected

◆ get_thread_instance()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
Ptr<TThread> CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::get_thread_instance ( size_t  id,
Ptr< TThreadData >  data,
bool  is_calc_thread 
)
protected

◆ GetCurrentDt()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
virtual t_fexpcommon_ct CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::GetCurrentDt ( )
inlineoverridevirtual

Implements ICFEXPSolverBase.

◆ GetSerializedData()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
virtual Ptr<t_SerializedData> CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::GetSerializedData ( )
inlineoverridevirtual

Implements ICFEXPSolverBase.

◆ RmvModel()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
virtual void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::RmvModel ( const std::string &  key)
inlineoverridevirtual

Implements ICFEXPSolverBase.

◆ SetCurrentDt()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
virtual void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::SetCurrentDt ( t_fexpcommon_ct  dt)
inlineoverridevirtual

Implements ICFEXPSolverBase.

◆ SetSerializedData()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
virtual void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::SetSerializedData ( Ptr< t_SerializedData data)
inlineoverridevirtual

Implements ICFEXPSolverBase.

◆ Start()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
virtual void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::Start ( )
overridevirtual

It starts process of a numerical simulation.

Implements ICFEXPSolverBase.

◆ Synchronize()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::Synchronize ( ESynchronization  barrier)
protected

◆ thread_Calculation_function()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::thread_Calculation_function ( size_t  thread_id,
Ptr< TThreadData >  data 
)
protected

◆ try_export_calculation_results()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::try_export_calculation_results ( Ptr< TThreadData >  data,
size_t  thread_id 
)
protected

◆ update_model_mapping()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::update_model_mapping ( size_t  thread_id)
protected

◆ update_time_step()

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
void CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::update_time_step ( Ptr< TThreadData >  data)
protected

Member Data Documentation

◆ _calculator_map

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
std::map<size_t, Ptr<TExpCalc> > CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::_calculator_map
protected

◆ _result_saved

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
std::atomic_bool CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::_result_saved
protected

◆ _thread_data

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
Ptr<TThreadData> CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::_thread_data
protected

◆ _thread_map

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
std::map<size_t, Ptr<TThread> > CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::_thread_map
protected

◆ _threads

template<typename TExpCalc , typename TThreadData , typename TThread , typename Tbarrier >
size_t CFEXPParallelSolver< TExpCalc, TThreadData, TThread, Tbarrier, std::enable_if< std::is_base_of< ICFEXPExplicitCalcBase, TExpCalc >::value &&std::is_base_of< ICFEXPThreadDataBase, TThreadData >::value &&std::is_base_of< ICFEXPThreadBase, TThread >::value &&std::is_base_of< ICFEXPSynchrThreadBarrier, Tbarrier >::value >::type >::_threads
protected

The documentation for this class was generated from the following file: